#!/usr/bin/env python3
"""
PBPK系统简单测试

用于验证系统各模块可以正常导入和运行，无需额外依赖
"""

import sys
import os

def test_imports():
    """测试模块导入"""
    print("正在测试模块导入...")
    
    try:
        # 测试基础模块
        from src.absorption.absorption_module import AbsorptionModel
        print("✓ 吸收模块导入成功")
        
        from src.distribution.distribution_module import DistributionModel
        print("✓ 分布模块导入成功")
        
        from src.elimination.elimination_module import EliminationModel
        print("✓ 消除模块导入成功")
        
        from src.utils.logger import PBPKLogger
        print("✓ 日志模块导入成功")
        
        from src.utils.config_manager import ConfigManager
        print("✓ 配置管理器导入成功")
        
        return True
        
    except ImportError as e:
        print(f"✗ 模块导入失败: {e}")
        return False

def test_basic_functionality():
    """测试基本功能"""
    print("\n正在测试基本功能...")
    
    try:
        # 测试配置管理器
        from src.utils.config_manager import ConfigManager
        config = ConfigManager()
        print("✓ 配置管理器创建成功")
        
        # 测试日志系统
        from src.utils.logger import PBPKLogger
        logger = PBPKLogger()
        print("✓ 日志系统创建成功")
        
        # 测试吸收模块
        from src.absorption.absorption_module import AbsorptionModel
        test_params = {
            'ka': 1.0,
            'kd': 0.5,
            'fa': 0.8,
            'fg': 0.9,
            'fh': 0.85,
            'ts': 1.0,
            'tlag': 0.1
        }
        
        abs_model = AbsorptionModel(test_params)
        print("✓ 吸收模块创建成功")
        
        # 测试分布模块
        from src.distribution.distribution_module import DistributionModel
        dist_params = {
            'Vp': 0.045,
            'Ve': 0.15,
            'fu': 0.1,
            'BP': 1.0,
            'logP': 2.0,
            'pKa': 7.4
        }
        
        dist_model = DistributionModel(dist_params)
        print("✓ 分布模块创建成功")
        
        # 测试消除模块
        from src.elimination.elimination_module import EliminationModel
        elim_params = {
            'CL_hepatic': 10.0,
            'CL_renal': 5.0,
            'CL_biliary': 1.0,
            'CL_other': 0.5,
            'fu': 0.1,
            'BP': 1.0,
            'Vss': 50.0
        }
        
        elim_model = EliminationModel(elim_params)
        print("✓ 消除模块创建成功")
        
        return True
        
    except Exception as e:
        print(f"✗ 基本功能测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

def test_main_system():
    """测试主系统"""
    print("\n正在测试主系统集成...")
    
    try:
        # 测试主系统导入
        from demo.main import PBPKModelingSystem
        print("✓ 主系统导入成功")
        
        # 测试系统创建
        system = PBPKModelingSystem()
        print("✓ 主系统创建成功")
        
        # 测试获取配置
        config = system.config.config
        print("✓ 配置系统正常")
        print(f"配置包含 {len(config)} 个主要配置项")
        
        return True
        
    except Exception as e:
        print(f"✗ 主系统测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    print("=== PBPK系统快速测试 ===")
    
    # 添加模块路径
    current_dir = os.path.dirname(os.path.abspath(__file__))
    parent_dir = os.path.dirname(current_dir)
    if parent_dir not in sys.path:
        sys.path.insert(0, parent_dir)
    
    # 测试导入
    if test_imports():
        print("\n✓ 所有模块导入成功")
    else:
        print("\n✗ 模块导入存在问题")
        sys.exit(1)
    
    # 测试基本功能
    if test_basic_functionality():
        print("\n✓ 基本功能测试通过")
    else:
        print("\n✗ 基本功能测试失败")
        sys.exit(1)
    
    # 测试主系统
    if test_main_system():
        print("\n🎉 系统测试全部通过！")
        print("\nPBPK建模系统已准备就绪，可以开始使用！")
        print("\n使用方法:")
        print("  python3 main.py --help  # 查看帮助")
        print("  python3 main.py --config config/example.json  # 使用示例配置")
    else:
        print("\n⚠️  主系统测试失败，请检查错误信息")